package com.kkwrite.regimen.provider.service.user;

import com.kkwrite.regimen.common.entity.dto.BaseDTO;
import com.kkwrite.regimen.common.entity.dto.OutDTO;
import com.kkwrite.regimen.common.entity.dto.login.InviterInfoDTO;
import com.kkwrite.regimen.common.entity.dto.user.PageableUserDTO;
import com.kkwrite.regimen.common.entity.dto.user.RegUserDTO;
import com.kkwrite.regimen.common.entity.dto.user.RegUserInDTO;
import com.kkwrite.regimen.common.entity.dto.user.RegUserOutDTO;
import com.kkwrite.regimen.common.entity.dto.user.UserOutDTO;
import com.kkwrite.regimen.provider.domain.RegUserDO;

/**
 * Created by lisha on 2018/7/11 21:16.
 *
 * @author lisha
 */
public interface UserService {

    /**
     * 保存一个User
     * @param userDTO 需要保存的user
     * @return base_dto
     */
    BaseDTO saveUser(RegUserDTO userDTO);

    /**
     * 更新用户信息
     * @param inDTO inDTO
     * @return outDTO
     */
    RegUserOutDTO updateUser(RegUserInDTO inDTO);

    /**
     * 根据userId查询user信息
     * @param userId userId
     * @return user info
     */
    OutDTO<UserOutDTO> queryUser(String userId);
    
    /**
     * 根据inviterId查询邀请人明细
     * @param inviterId inviterId
     * @return user info
     */
    PageableUserDTO queryUserByInviterId(Integer page, Integer size,Long inviterId, Integer sortType );

    /**
     * 保存用户邀请者信息
     * @param infoDTO 入参：邀请标识、邀请者ID
     * @param userId 用户ID
     */
    void saveInviter(InviterInfoDTO infoDTO, Integer userId);

    /**
     * 根据userID查询用户
     * @param userId userId
     * @return userDO
     */
    RegUserDO findById(int userId);
}
